package co.edu.usbcali.pqr.dataaccess.dao;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

import co.edu.usbcali.pqr.dataaccess.api.HibernateDaoImpl;
import co.edu.usbcali.pqr.modelo.UsuariosInternos;


/**
 * A data access object (DAO) providing persistence and search support for
 * UsuariosInternos entities. Transaction control of the save(), update() and
 * delete() operations can directly support Spring container-managed
 * transactions or they can be augmented to handle user-managed Spring
 * transactions. Each of these methods provides additional information for how
 * to configure it for the desired type of transaction control.
 *
 * @see lidis.UsuariosInternos
 */
@Scope("singleton")
@Repository("UsuariosInternosDAO")
public class UsuariosInternosDAO extends HibernateDaoImpl<UsuariosInternos, Long>
    implements IUsuariosInternosDAO {

	private static final Logger log = LoggerFactory.getLogger(UsuariosInternosDAO.class);
    @Resource
    private SessionFactory sessionFactory;

    public static IUsuariosInternosDAO getFromApplicationContext(
        ApplicationContext ctx) {
        return (IUsuariosInternosDAO) ctx.getBean("UsuariosInternosDAO");
    }

	    @SuppressWarnings("unchecked")
	   	@Override
	   	public Long existeLoginUsuario(String pDescripcion) throws Exception {
	   		Long cant = 0L;
	   			try {
	   			Query query = getSession().getNamedQuery("existe_login_usuario_interno");
	   			query.setParameter("pDescripcion", pDescripcion);
	   			List<Long> lista = query.list();

	   			if (lista!=null) {
	   				cant =lista.get(0);
	   			}
	   			
	   		} catch (Exception e) {
	   			log.error(e.getMessage());
	   			throw e;
	   		}
	   		return cant;

	   	}
	
}
